]> dgit.raspbian.org Git - gnome-shell.git/commit
iconGrid: Create icon clones in a separate loop
authorDaniel van Vugt <daniel.van.vugt@canonical.com>
Fri, 14 Feb 2020 10:24:58 +0000 (18:24 +0800)
committerFlorian Müllner <florian.muellner@gmail.com>
Wed, 19 Feb 2020 15:39:21 +0000 (15:39 +0000)
commite781e1fdba9faf6a02f8cca33e308070620266eb
treec8d00e2044bd66f4c7bd95f96850b2c1f6da5a77
parent12de4e67f80a26ccd1221a035bca35ef4c4718da
iconGrid: Create icon clones in a separate loop

For reasons not yet fully understood, `Main.uiGroup.add_actor` takes around
10 milliseconds to complete.

Because of this, each `actor.opacity = 0` has a good chance of falling
on a different frame. And when it does, `_opacityChangedId` also lands
on multiple different frames each incurring a separate relayout cycle.
It is this excessive number of relayouts that causes stuttering in the
icon grid animation (#2065). But it is the slowness of `uiGroup.add_actor`
that causes the number to be excessive when it should be one.

By creating the clones and adding them to `uiGroup` early, we then enable
the existing loop starting the animation to complete within a single frame.
And by completing within a single frame all the opacity changes land within
the same frame interval, thus incurring only a single relayout instead of
many.

This issue went unnoticed until 004a5e1042 (!704), after which the slow
emissions of `notify::opacity` became a more visible performance problem.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/issues/2065
https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/1002
js/ui/iconGrid.js